const path = require("path");
const fs = require("fs");
const file = require("../read");
const { log } = require("console");
//相册目录渲染
const album = async (req, res) => {
  data = await file.getFileData("./data.json");
  if (!data) {
    res.send({
      code: 100,
      message: "success",
      data: [],
    });
  } else {
    res.send({
      code: 200,
      message: "success",
      data: data,
    });
  }
};
// 创建相册
const addAlbum = async (req, res) => {
  let data = await file.getFileData("./data.json");
  // 判断数据是否为空
  if (!data.albumList) {
    data.albumList = [];
  }
  // 为添加的数据增加一个id属性
  let id =
    data.albumList.length > 0
      ? Math.max(...data.albumList.map((index) => index.id)) + 1
      : 1;
  // 获取请求的具体数据  变量解构赋值
  const { name, img } = req.body;
  // 创建一个新对象接收请求数据
  const newCar = {
    id: id,
    name,
    img,
    imgData: [],
  };
  // 数据添加到储存位置
  data.albumList.push(newCar);
  // 数据储存到文件里面
  let result = await file.setFileData("./data.json", data);
  // 判断是否添加成功
  if (result) {
    res.json({
      code: 200,
      message: "添加成功",
      book: newCar,
    });
  } else {
    res.json({
      code: 500,
      message: "fail",
    });
  }
};
// 上传照片
const upload = async (req, res) => {
  // 定义一个变量接收客户端传送来的文件
  let fileData = req.files.photo;
  // 生成唯一文件的名称
  function generateNmae() {
    return Date.now() + Math.random().toString(36).substr(2);
  }
  async function moveFile(filesData) {
    // 定义一个空数组接收处理后的文件名称
    const filePromise = [];
    if (!Array.isArray(filesData)) {
      return (fileData = [fileData]);
    }
    // 循环前端上传的文件,将文件保存到img文件夹,并返回图片名字
    filesData.forEach((item, index) => {
      let a = new Promise((resolve, reject) => {
        // 文件添加唯一名称
        var imgName = generateNmae() + path.extname(item.name);
        // 将文件储存在那个文件夹里面
        var imgPath = path.join("./", "img", imgName);
        // 移动文件到指定文件夹
        item.mv(imgPath, (err) => {
          if (err) {
            resolve(`第${index + 1}文件错误`);
          }
          resolve(imgName);
        });
      });
      // 将循环后的每一个文件添加到数组中
      filePromise.push(a);
    });
    // 当所有的promise都成功时返回结果
    return await Promise.all(filePromise);
  }
  moveFile(fileData);
  /********************************************** */
  let data = await file.getFileData("./data.json");
  //   相册id
  let albumId = req.body.albumId;

  // 判断数据是否为空
  if (!data.albumList) {
    data.albumList = [];
  }
  let albumData = data.albumList.find((item) => {
    return item.id == albumId;
  });
  // 拿到函数处理结果
  let bookImg = await moveFile(fileData);
  // 生成返回客户端的数据信息
  bookImg = bookImg.map((img) => {
    return `http://localhost:3000/img/${img}`;
  });
  console.log(bookImg);
  bookImg.forEach((item) => {
    albumData.imgData.push(item);
  });
  // 数据储存到文件里面
  let result = await file.setFileData("./data.json", data);
  // 判断是否添加成功
  if (result) {
    res.json({
      code: 200,
      message: "添加成功",
      albumList: albumData,
    });
  } else {
    res.json({
      code: 500,
      message: "fail",
    });
  }
};
// 相册内容渲染
const albummain = async (req, res) => {
  var id = req.query.id;
  data = await file.getFileData("./data.json");
  if (!data) {
    res.send({
      code: 100,
      message: "success",
      data: [],
    });
  } else {
    let datas = data.albumList.find((item) => {
      return item.id == id;
    });
    res.send({
      code: 200,
      message: "success",
      data: datas.imgData,
    });
  }
};
// 导出函数方法
module.exports = { addAlbum, album, upload, albummain };
